package coba.mailing.function;

import java.util.Collections;
import java.util.Comparator;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Set;

import coba.mailing.model.Atractivo;
import coba.mailing.model.AtractivoSum;

public class SumAtractivos {

	public static List<AtractivoSum> sumAtractivos(List<Atractivo> listAtractivo) {

		List<AtractivoSum> listAtractivoSum = new LinkedList<AtractivoSum>();

		Set<Long> setRecorridoId = new HashSet<Long>();
		
		for (Atractivo atractivo : listAtractivo) {
			setRecorridoId .add(atractivo.getRecorridoId());
		}
		
		for (Long recorridoId : setRecorridoId) {
			Long minHora = 9999L;
			Long maxHora = 0L;
			Long itinerarioId = null;
			String nombre = null;
			String mails = null;

			for (Atractivo atractivo : listAtractivo) {
				if (atractivo.getRecorridoId().equals(recorridoId)) {
					if (atractivo.getHora().longValue() < minHora.longValue())
						minHora = atractivo.getHora();

					if (atractivo.getHora().longValue() > maxHora.longValue())
						maxHora = atractivo.getHora();

					itinerarioId = atractivo.getItinerarioId();
					nombre = atractivo.getNombre();
					mails = atractivo.getMails();
				}
			}

			Long horaFin = (maxHora / 100 + ((maxHora % 100) == 30 ? 1 : 0)) * 100 + ((maxHora % 100) == 30 ? 0 : 30);
			
			listAtractivoSum.add(new AtractivoSum(
					itinerarioId,
					recorridoId,
					nombre,
					mails,
					minHora,
					horaFin));
		}

		Collections.sort(listAtractivoSum, new Comparator<AtractivoSum>() {
			@Override
			public int compare(AtractivoSum o1, AtractivoSum o2) {
				return Long.compare(o1.getHoraComienzo(), o2.getHoraComienzo());
			}
		});

		return listAtractivoSum;
	}

}
